package com.cwt_taxi_xa.protocol;

import android.content.Context;

import com.cwt_taxi_xa.service.DvrService;
import com.cwt_taxi_xa.util.Tools;

import java.io.ByteArrayOutputStream;

/**
 * 粘包专用工具类
 *
 * @author Administrator
 *
 */
public class NianBaoUtil {


	/**
	 * 计价器专用
	 */
	/**
	 * 0-初始状态
	 * 1-读到55
	 * 2-读到55后读到AA
	 * 3-读到55AA后读到长度高位
	 * 4-读到55AA后读到长度地位，之后保存长度+3，之后复位
	 */
	static int bs_jjq = 0;
	static byte[] buffer_jjq = new byte[1024*4];
	static int index_jjq = 0;
	static int size_jjq = 0;
	public synchronized static void nbjjq(byte[] data, int size, Context context) {
		for (int i = 0; i < size; i++) {
			buffer_jjq[index_jjq] = data[i];
			index_jjq++;
			if(bs_jjq==0){
				if((data[i]&0xff)==0x55){
					bs_jjq = 1;
					buffer_jjq[0] = 0x55;
					index_jjq = 1;
				}else{
					index_jjq = 0;
				}
			}
			else if(bs_jjq==1){
				if((data[i]&0xff)==0xAA){
					bs_jjq = 2;
				}else{
					bs_jjq = 0;
				}
			}
			else if(bs_jjq==2){
				if((data[i]&0xff)==0x55){
					bs_jjq = 3;
				}
			}
			else if(bs_jjq==3){
				if((data[i]&0xff)==0xAA){
					if(index_jjq==4){
						bs_jjq = 2;
						index_jjq = 2;
					}else{
						DecoderSZ55aa.decoderData("计价器",Tools.byteTobyte(buffer_jjq, 0, index_jjq),context);
						bs_jjq = 0;
						index_jjq = 0;
					}
				}else{
					if((data[i]&0xff)==0x55){
						bs_jjq = 3;
					}else{
						bs_jjq = 2;
					}
				}
			}
		}
	}


	/**
	 * 计价器专用
	 */
//	public static StringBuffer sb_jjq = new StringBuffer();
//	public static String splkey = "55AA";
//
//	public synchronized static void nbjjq(byte[] data, Context context) {
//		try {
//			String hexData = Tools.parseByte2HexStr(data).toUpperCase();
//			sb_jjq.append(hexData);
//			String str = sb_jjq.toString();
//			if (str.endsWith(splkey) && str.length() > splkey.length()) {
//				checkjjq(str, context);
//			} else if (str.length() > 1024 * 2) {
//				if (str.contains(splkey + splkey)) {
//					int index = str.lastIndexOf(splkey + splkey);
//					String oldstr = str.substring(0, index) + splkey;
//					if (oldstr.length() > splkey.length()*2) {
//						checkjjq(oldstr, context);
//					}
//					sb_jjq = new StringBuffer();
//					sb_jjq.append(str.substring(index + splkey.length(), str.length()));
//				} else {
//					Log.e("NianBaoUtil发生失误-jjq", "粘包缓存超过1024个字节，无处理标志，废弃。");
//					AppLog.e(str);
//					sb_jjq = new StringBuffer();
//				}
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//	}
//
//	public synchronized static void checkjjq(String str, Context context) {
//		if (str.contains(splkey + splkey)) {
//			String[] dataArr = str.split(splkey + splkey);
//			for (int i = 0; i < dataArr.length; i++) {
//				if (i == 0 && dataArr[i].startsWith(splkey)) {
//					DecoderSZ55aa.decoderData("计价器",
//							Tools.parseHexStr2Byte(dataArr[i] + splkey),
//							context);
//				} else if (i == dataArr.length - 1) {
//					DecoderSZ55aa.decoderData("计价器",
//							Tools.parseHexStr2Byte(splkey + dataArr[i]),
//							context);
//				} else {
//					DecoderSZ55aa.decoderData("计价器", Tools
//							.parseHexStr2Byte(splkey + dataArr[i] + splkey),
//							context);
//				}
//			}
//		} else {
//			if (str.startsWith(splkey)) {
//				DecoderSZ55aa.decoderData("计价器", Tools.parseHexStr2Byte(str),
//						context);
//			} else {
//				String[] ss = str.split(splkey);
//				if (ss.length > 1) {
//					DecoderSZ55aa.decoderData(
//							"计价器",
//							Tools.parseHexStr2Byte(splkey + ss[ss.length - 1]
//									+ splkey), context);
//				}
//			}
//		}
//		sb_jjq = new StringBuffer();
//	}







	public static ByteArrayOutputStream baos_voice = new ByteArrayOutputStream(1024*50);
	public static int pic_data_index_voice = 0;
	public synchronized static void nbVoice(byte[] data) {
		try {
			for (int i = 0; i < data.length; i++) {
				if(pic_data_index_voice==0&&data[i]!=0x7E){
					continue;
				}
				baos_voice.write(data[i]);
				pic_data_index_voice++;
				if(data[i]==0xAA&&pic_data_index_voice>1){
					DDUtil.isNeedCare(baos_voice.toByteArray());
					baos_voice.reset();
					pic_data_index_voice = 0;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 博海顶灯专用
	 */


	public static ByteArrayOutputStream baos_dd = new ByteArrayOutputStream(1024*50);
	public static int pic_data_index_dd = 0;
	public synchronized static void nbdd2(byte[] data) {
		try {
			for (int i = 0; i < data.length; i++) {
				if(pic_data_index_dd==0&&data[i]!=0x7E){
					continue;
				}
				baos_dd.write(data[i]);
				pic_data_index_dd++;
				if(data[i]==0x7E&&pic_data_index_dd>1){
					DDUtil.isNeedCare(baos_dd.toByteArray());
					baos_dd.reset();
					pic_data_index_dd = 0;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


//	public static StringBuffer sb_dd = new StringBuffer();
//	public static String splkey_dd = "7E";
//
//	public synchronized static void nbdd(byte[] data, Context context) {
//		try {
//			String hexData = Tools.parseByte2HexStr(data).toUpperCase();
//			sb_dd.append(hexData);
//			String str = sb_dd.toString();
//			if (str.endsWith(splkey_dd) && str.length() > splkey_dd.length()) {
//				checkdd(str, context);
//			} else if (str.length() > 1024 * 2) {
//				if (str.contains(splkey_dd + splkey_dd)) {
//					int index = str.lastIndexOf(splkey_dd + splkey_dd);
//					String oldstr = str.substring(0, index) + splkey_dd;
//					if (oldstr.length() > splkey_dd.length()*2) {
//						checkdd(oldstr, context);
//					}
//					sb_dd = new StringBuffer();
//					sb_dd.append(str.substring(index + splkey_dd.length(), str.length()));
//				} else {
//					Log.e("NianBaoUtil发生失误-DD", "粘包缓存超过1024个字节，无处理标志，废弃。");
////					AppLog.e(new String(Tools.parseHexStr2Byte(str)));
//					sb_dd = new StringBuffer();
//				}
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//	}
//
//	public synchronized static void checkdd(String str, Context context) {
//		if (str.contains(splkey_dd + splkey_dd)) {
//			String[] dataArr = str.split(splkey_dd + splkey_dd);
//			for (int i = 0; i < dataArr.length; i++) {
//				if (i == 0 && dataArr[i].startsWith(splkey_dd)) {
//					DDUtil.isNeedCare(Tools.parseHexStr2Byte(dataArr[i] + splkey_dd));
//				} else if (i == dataArr.length - 1) {
//					DDUtil.isNeedCare(Tools.parseHexStr2Byte(splkey_dd + dataArr[i]));
//				} else {
//					DDUtil.isNeedCare( Tools.parseHexStr2Byte(splkey_dd + dataArr[i] + splkey_dd));
//				}
//			}
//		} else {
//			if (str.startsWith(splkey_dd)) {
//				DDUtil.isNeedCare( Tools.parseHexStr2Byte(str));
//			} else {
//				String[] ss = str.split(splkey_dd);
//				if (ss.length > 1) {
//					DDUtil.isNeedCare( Tools.parseHexStr2Byte(splkey_dd + ss[ss.length - 1]+ splkey_dd));
//				}
//			}
//		}
//		sb_dd = new StringBuffer();
//	}




	/**
	 * MCU专用
	 */
	public static ByteArrayOutputStream baos_mcu = new ByteArrayOutputStream(1024*50);
	public static int pic_data_index_mcu = 0;
	public synchronized static void nb_mcu(byte[] data) {
		try {
			for (int i = 0; i < data.length; i++) {
				if(pic_data_index_mcu==0&&data[i]!=0x7A){
					continue;
				}
				baos_mcu.write(data[i]);
				pic_data_index_mcu++;
				if(data[i]==0x7A&&pic_data_index_mcu>1){
					MCUUtil.onOrder(baos_mcu.toByteArray());
					baos_mcu.reset();
					pic_data_index_mcu = 0;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
//	public static StringBuffer sb_mcu = new StringBuffer();
//	public static String splkey_mcu = "7A";
//	public static long lastMcuData = 0;
//	public synchronized static void nbmcu(byte[] data, Context context) {
//		if(System.currentTimeMillis()-lastMcuData>50){
//			sb_mcu = new StringBuffer();
//		}
//		lastMcuData = System.currentTimeMillis();
//		try {
//			String hexData = Tools.parseByte2HexStr(data).toUpperCase();
//			sb_mcu.append(hexData);
//			String str = sb_mcu.toString();
//			if (str.endsWith(splkey_mcu) && str.length() > splkey_mcu.length()) {
//				checkmcu(str, context);
//			} else if (str.length() > 1024 * 2) {
//				if (str.contains(splkey_mcu + splkey_mcu)) {
//					int index = str.lastIndexOf(splkey_mcu + splkey_mcu);
//					String oldstr = str.substring(0, index) + splkey_mcu;
//					if (oldstr.length() > splkey_mcu.length()*2) {
//						checkmcu(oldstr, context);
//					}
//					sb_mcu = new StringBuffer();
//					sb_mcu.append(str.substring(index + splkey_mcu.length(), str.length()));
//				} else {
//					Log.e("NianBaoUtil发生失误-MCU", "粘包缓存超过1024个字节，无处理标志，废弃。");
//					sb_mcu = new StringBuffer();
//				}
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//	}
//
//	public synchronized static void checkmcu(String str, Context context) {
//		if (str.contains(splkey_mcu + splkey_mcu)) {
//			String[] dataArr = str.split(splkey_mcu + splkey_mcu);
//			for (int i = 0; i < dataArr.length; i++) {
//				if (i == 0 && dataArr[i].startsWith(splkey_mcu)) {
//					MCUUtil.onOrder(Tools.parseHexStr2Byte(dataArr[i] + splkey_mcu));
//				} else if (i == dataArr.length - 1) {
//					MCUUtil.onOrder(Tools.parseHexStr2Byte(splkey_mcu + dataArr[i]));
//				} else {
//					MCUUtil.onOrder( Tools.parseHexStr2Byte(splkey_mcu + dataArr[i] + splkey_mcu));
//				}
//			}
//		} else {
//			if (str.startsWith(splkey_mcu)) {
//				MCUUtil.onOrder( Tools.parseHexStr2Byte(str));
//			} else {
//				String[] ss = str.split(splkey_mcu);
//				if (ss.length > 1) {
//					MCUUtil.onOrder( Tools.parseHexStr2Byte(splkey_mcu + ss[ss.length - 1]+ splkey_mcu));
//				}
//			}
//		}
//		sb_mcu = new StringBuffer();
//	}




	/**
	 * TSM刷卡器专用
	 */
	/**
	 * 0-初始状态
	 * 1-读到55
	 * 2-读到55后读到AA
	 * 3-读到55AA后读到长度高位
	 * 4-读到55AA后读到长度地位，之后保存长度+3，之后复位
	 */
	static int bs_tsm = 0;
	static byte[] buffer_tsm = new byte[1024*4];
	static int index_tsm = 0;
	static int size_tsm = 0;
	public synchronized static void nbtsm(byte[] data, int size) {
		for (int i = 0; i < size; i++) {
			buffer_tsm[index_tsm] = data[i];
			index_tsm++;
			if(bs_tsm==0){
				if((data[i]&0xff)==0x55){
					bs_tsm = 1;
					buffer_tsm[0] = 0x55;
					index_tsm = 1;
				}
			}
			else if(bs_tsm==1){
				if((data[i]&0xff)==0xAA){
					bs_tsm = 2;
				}else{
					bs_tsm = 0;
				}
			}
			else if(bs_tsm==2){
				bs_tsm = 3;
				size_tsm = (data[i]&0xff)*256;
			}
			else if(bs_tsm==3){
				bs_tsm = 4;
				size_tsm = size_tsm+(data[i]&0xff)+7;
			}
			else if(bs_tsm==4){
				if(index_tsm==size_tsm){
					CardUtil.onReceOrder(buffer_tsm, index_tsm);
					bs_tsm = 0;
					index_tsm = 0;
				}
			}
		}
	}


	/**
	 * 通立dvr专用
	 */
//	public static byte[] pic_data = new byte[1024*50];
//	public static ByteArrayBuffer bb = new ByteArrayBuffer(1024*50);
	public static ByteArrayOutputStream baos = new ByteArrayOutputStream(1024*50);
	//	public static ByteBuffer bbf = ByteBuffer.allocate(1024*50);
	public static int pic_data_index = 0;
	public synchronized static void nbtldvr(byte[] data, int size) {
		try {
			for (int i = 0; i < size; i++) {
				baos.write(data[i]);
				pic_data_index++;
				if(data[i]==0x7E&&pic_data_index>1){
					DvrService.getInstance().onOrder(baos.toByteArray());
					baos.reset();
					pic_data_index = 0;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
//		try {
//			for (int i = 0; i < size; i++) {
//				pic_data[pic_data_index] = data[i];
//				pic_data_index++;
//				if(data[i]==0x7E&&pic_data_index>1){
//					DvrService.getInstance().onOrder(pic_data, pic_data_index);
//					pic_data_index = 0;
//				}
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
	}



}
